home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / glibc108.zip / glibc108 / sysdeps / generic / bzero.c < prev    next >
C/C++ Source or Header  |  1992-05-17  |  2KB  |  82 lines

  1. /* Copyright (C) 1991 Free Software Foundation, Inc.
  2.    Contributed by Torbjorn Granlund (tege@sics.se).
  3.    
  4. This file is part of the GNU C Library.
  5.  
  6. The GNU C Library is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU Library General Public License as
  8. published by the Free Software Foundation; either version 2 of the
  9. License, or (at your option) any later version.
  10.  
  11. The GNU C Library is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14. Library General Public License for more details.
  15.  
  16. You should have received a copy of the GNU Library General Public
  17. License along with the GNU C Library; see the file COPYING.LIB.  If
  18. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  19. Cambridge, MA 02139, USA.  */
  20.  
  21. #include <ansidecl.h>
  22. #include <string.h>
  23. #include <memcopy.h>
  24.  
  25. /* Set N bytes of S to 0.  */
  26. void
  27. DEFUN(bzero, (s, n), PTR s AND size_t len)
  28. {
  29.   long int dstp = (long int) s;
  30.   CONST op_t zero = 0;
  31.  
  32.   if (len >= 8)
  33.     {
  34.       size_t xlen;
  35.  
  36.       /* There are at least some bytes to zero.  No need to test
  37.      for LEN == 0 in this alignment loop.  */
  38.       while (dstp % OPSIZ != 0)
  39.     {
  40.       ((byte *) dstp)[0] = 0;
  41.       dstp += 1;
  42.       len -= 1;
  43.     }
  44.  
  45.       /* Write 8 op_t per iteration until less than 8 op_t remain.  */
  46.       xlen = len / (OPSIZ * 8);
  47.       while (xlen != 0)
  48.     {
  49.       ((op_t *) dstp)[0] = zero;
  50.       ((op_t *) dstp)[1] = zero;
  51.       ((op_t *) dstp)[2] = zero;
  52.       ((op_t *) dstp)[3] = zero;
  53.       ((op_t *) dstp)[4] = zero;
  54.       ((op_t *) dstp)[5] = zero;
  55.       ((op_t *) dstp)[6] = zero;
  56.       ((op_t *) dstp)[7] = zero;
  57.       dstp += 8 * OPSIZ;
  58.       xlen -= 1;
  59.     }
  60.       len %= OPSIZ * 8;
  61.  
  62.       /* Write 1 op_t per iteration until less than op_t remain.  */
  63.       xlen = len / OPSIZ;
  64.       while (xlen != 0)
  65.     {
  66.       ((op_t *) dstp)[0] = zero;
  67.       dstp += OPSIZ;
  68.       xlen -= 1;
  69.     }
  70.       len %= OPSIZ;
  71.     }
  72.  
  73.   /* Write the last few bytes.  */
  74.   while (len != 0)
  75.     {
  76.       ((byte *) dstp)[0] = 0;
  77.       dstp += 1;
  78.       len -= 1;
  79.     }
  80. }
  81.  
  82.